
# -*- coding: utf-8 -*-
from django import forms
from django.forms import Form, ModelForm, ModelChoiceField,ModelMultipleChoiceField
from wal.pedidos.models import Pedido, DetallePedido
from wal.clientes.models import Cliente
from wal.articulos.models import Articulo, Ensamblado
from django.contrib.admin import widgets
from itertools import chain


class choiceName(ModelChoiceField):
    def label_from_instance(self, obj):
        name = obj.first_name +' '+ obj.last_name
        return name
    
class choiceMultipleName(ModelMultipleChoiceField):
    def label_from_instance(self, obj):
        name = obj.first_name +' '+ obj.last_name
        return name
    
class PedidosForm(ModelForm):
    fecha = forms.DateField(widget = widgets.AdminDateWidget(),label="* Fecha",help_text='Fecha de emisión del pedido')
    plazo = forms.DateField(widget = widgets.AdminDateWidget(),label="* Plazo de entrega",help_text='Fecha en la que se debe entregar el pedido')
    def __init__(self,*args, **kwargs):
        super(PedidosForm, self).__init__(*args, **kwargs)
        self.fields['cliente'].queryset = Cliente.objects.order_by("nombre")
    
    class Meta:
        model = Pedido
        exclude = ('nombre','ot','finalizado',)
    
    
    def clean_fechas(self):
        cleaned_data = super(PedidosForm, self).clean()
        fecha = cleaned_data.get("fecha")
        plazo = cleaned_data.get("plazo")
        if plazo < fecha:
            #raise forms.ValidationError("Las Fechas están mal!")
            msg = u"Las Fechas están mal!"
            self._errors["fecha"] = self.error_class([msg])
            self._errors["plazo"] = self.error_class([msg])

            # These fields are no longer valid. Remove them from the
            # cleaned data.
            del cleaned_data["fecha"]
            del cleaned_data["plazo"]
            return False
        return cleaned_data
    
        
class DetallePedidoForm(ModelForm):
    def __init__(self,*args, **kwargs):
        super(DetallePedidoForm, self).__init__(*args, **kwargs)
        self.fields['articulo'].queryset = Articulo.objects.order_by("nombre")

    class Meta:
        model = DetallePedido
        exclude = ('pedido','proceso',)
        
class FechasForm(Form):
    #inicio = forms.DateField(widget = SelectDateWidget)
    #fin = forms.DateField(widget = SelectDateWidget)
    inicio = forms.DateField(widget = widgets.AdminDateWidget(),label="* Fecha de inicio")
    fin = forms.DateField(widget = widgets.AdminDateWidget(),label="* Fecha de fin")
    
    def clean_fechas(self):
        cleaned_data = super(FechasForm, self).clean()
        inicio = cleaned_data.get("inicio")
        fin = cleaned_data.get("fin")
        if fin < inicio:
            #raise forms.ValidationError("Las Fechas están mal!")
            msg = u"Las Fechas están mal!"
            self._errors["inicio"] = self.error_class([msg])
            self._errors["fin"] = self.error_class([msg])

            # These fields are no longer valid. Remove them from the
            # cleaned data.
            del cleaned_data["inicio"]
            del cleaned_data["fin"]
            return False
        return cleaned_data
    
class SearchForm(forms.Form):
    """Search posts by keywords"""
    keywords = forms.CharField(max_length=100)